
import 'package:flutter/material.dart';

class DataType extends StatefulWidget {
  @override
  _DataTypeState createState() => _DataTypeState();
}

class _DataTypeState extends State<DataType> {
  @override
  Widget build(BuildContext context) {
    _numType();
    _stringType();
    _boolType();
    _listType();
    _mapType();
    return Container(child: Text("常用数据类型，请看控制台输出"),);
  }

  /**
   * 数字类型
   */
  void _numType() {
    print("======== _numType ==========");
    num num1 = -1;
    num num2 = 2;
    int int1= 3;
    double d1 = 1.68;
    print("num1绝对值："+num1.abs().toString());
    double d_num1 = num1.toDouble();
    print("num2转 double 值：$d_num1");
    int i_d1 = d1.toInt();
    print("d1 转 int 值：$i_d1");
    print("num1:$num1 num2:$num2 int1:$int1 d1:$d1");
  }

  void _stringType() {
    print("======== _stringType ==========");
    String str1 = "字符串", str2 = "双引号";  //字符串的定义
    String str3 = 'str1: $str1  str2: $str2'; //字符串拼接
    String str4 = 'str1:'+str1+' str2:'+str2; //字符串拼接
    String str5 = "中华人民共和国万岁，成立80周年";
    debugPrint(str3);
    print(str4);
    print(str5.codeUnitAt(str5.length-1));
    print(str5.substring(0,6));
    print(str5.indexOf("，"));
  }

  void _boolType() {
    print("======== _boolType ==========");
    bool success = true;
    bool failure = false;
    print("success: $success , failure: $failure");
    print("result = "+(success || failure).toString());
    print("result = "+(success && failure).toString());
  }

  /**
   * 集合数据类型
   */
  void _listType() {
    print("======== _listType ==========");
    List list1 = [1,2,3.5, 'xyz'];
    List<int> list2 = [10,20,30,40];
    print("list1：$list1");
    print("list2：$list2");
    list1.addAll(list2);

    print("list1+list2: $list1");
    //list2 = list1;  //不能将一个泛型赋值给一个非泛型List. 反之则可以
    print("list1：$list1");
    List list4 = List.generate(10, (index) => index*2);
    print("list4 = $list4");

    //集合遍历 一
    print("集合遍历 一 for(int i=0; i<count; i++) ...");
    for(int i=0, count=list4.length; i<count; i++){
      print(list4[i]);
    }

    //集合遍历 二
    print("集合遍历 二 for(var o in list4) ...");
    for(var o in list4){
      print(o);
    }

    //集合遍历 三
    print("集合遍历 三 forEach((val){}) ...");
    list4.forEach((val){
      print(val);
    });
  }

  /**
   * Map 数据类型
   */
  void _mapType() {
    print("======== _mapType ==========");
    Map map1 = {'name':'cmw', 'age':36};
    map1['address'] = "广东";
    print('map1 = $map1');
    map1.remove('age');
    print('map1 = $map1');

    //集合遍历 一
    print("集合遍历一 map1.forEach((k,v) ...");
    map1.forEach((k,v){
      print('$k = $v');
    });

    //集合遍历 二
    print("集合遍历二  map1.map((k,v) ...");
    Map map2 = map1.map((k,v){
      return MapEntry(v, k);
    });
    print("map2 = $map2");

    //集合遍历 三
    print("集合遍历三  for(var k in map1.keys){ ...");
    for(var k in map1.keys){
      print("$k = ${map1[k]}");
    }
  }


}
